/**
 * 给定数组A，可以操作一次，选择一个真子段进行排序
 * 问是否可以将整个数组排序。
 * 
 * 将A复制一份记作B然后给B排序
 * 然后从前后分别对照A和B，记录不相等的位置
 * 看是否是真子段即可
 * 
 * 实际上不用这么麻烦，只需要检查头尾之一是否为最值即可
 * 因为始终选择N-1作为真子段排序。
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using vi = vector<int>;

int N;
vi A;

bool proc(){
    vi B(A.begin(), A.end());
    sort(B.begin(), B.end());

    
    int k = 0;
    while(k < N and A[k] == B[k]) ++k;
    if(k == N) return true;

    int t = N - 1;
    while(t >= 0 and A[t] == B[t]) --t;

    return t - k + 1 < N;
}

void work(){
    cin >> N;
    A.assign(N, {});
    for(auto & i : A) cin >> i;

    cout << (proc() ? "YES\n" : "NO\n");
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--) work();
    return 0;
}